package threadpool;

import callable.NumThread;
import introduction.PrintNumberRunnable;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * * 线程池
 * * 好处：
 * * -提高了程序执行的效率。（因为线程已经提前创建好了）
 * * -提高了资源的复用率。（因为执行完的线程并未销毁，而是可以继续执行其他的任务）
 * * -可以设置相关参数，对线程池中的线程的使用进行管理。
 * *
 */
public class ThreadPool {
    public static void main(String[] args) {
        // 1.提供指定线程数量的线程池
        ExecutorService service = Executors.newFixedThreadPool(10);
        ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;

        // 设置线程池的属性
        System.out.println(service.getClass());// class java.util.concurrent.ThreadPoolExecutor
        // 设置线程池中线程数的上限
        service1.setMaximumPoolSize(50);


        // 2.执行指定的线程的操作。
        // 需要提供实现Runnable接口或Callable接口实现类的对象。
        service.submit(new NumThread());// 适用于 Callable
        service.execute(new PrintNumberRunnable());// 适用于Runnable
        service.submit(new PrintNumberRunnable());

        // 3.关闭线程池
        service.shutdown();

    }
}
